package org.dromara.patrol.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.patrol.domain.PatrolActionStatistics;
import org.dromara.patrol.domain.bo.PatrolActionQuery;
import org.dromara.patrol.domain.bo.PatrolActionStatisticsBo;
import org.dromara.patrol.domain.bo.StatisticsCountBo;
import org.dromara.patrol.domain.vo.PatrolActionStatisticsVo;
import org.dromara.patrol.domain.vo.StatisticsCountTimeVo;
import org.dromara.patrol.domain.vo.StoreCoverVo;
import org.dromara.patrol.domain.vo.TaskStatusVo;
import org.dromara.patrol.domain.vo.*;

import java.util.Collection;
import java.util.List;

/**
 * 巡店管理-巡店行为统计Service接口
 *
 * @author han
 * @date 2024-04-19
 */
public interface IPatrolActionStatisticsService {

    /**
     * 查询巡店管理-巡店行为统计
     */
    PatrolActionStatisticsVo queryById(Long id);

    /**
     * 查询巡店管理-巡店行为统计列表
     */
    TableDataInfo<PatrolActionStatisticsVo> queryPageList(PatrolActionStatisticsBo bo, PageQuery pageQuery);

    /**
     * 查询巡店管理-巡店行为统计列表
     */
    List<PatrolActionStatisticsVo> queryList(PatrolActionStatisticsBo bo);

    /**
     * 新增巡店管理-巡店行为统计
     */
    Boolean insertByBo(PatrolActionStatisticsBo bo);

    /**
     * 修改巡店管理-巡店行为统计
     */
    Boolean updateByBo(PatrolActionStatisticsBo bo);

    /**
     * 校验并批量删除巡店管理-巡店行为统计信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询任务状态
     * @param query
     * @return
     */
    TaskStatusVo selectTaskStatus(PatrolActionQuery query);

    /**
     * 查询门店覆盖率
     * @param query
     * @return
     */
    StoreCoverVo selectStoreCover(PatrolActionQuery query);


    /**
     * 查询已覆盖的门店
     * @param query
     * @return
     */
    TableDataInfo<StoreCoverVo> selectStoreCovered(PatrolActionQuery query);


    /**
     * 查询未覆盖的门店
     * @param query
     * @return
     */
    TableDataInfo<StoreCoverVo> selectStoreNotCovered(PatrolActionQuery query);

    /**
     * 根据条件查询巡店行为列表
     * @param bo    条件
     * @return
     */
    List<PatrolActionStatistics> selectList(StatisticsCountBo bo, StatisticsCountTimeVo timeVo);

    /**
     * 报告按时完成统计
     * @param query
     * @return
     */
    PatrolFinishVo selectReportFinishOnTime(PatrolActionQuery query);

    /**
     * 巡店情况统计
     * @param query
     * @return
     */
    PatrolSituationCountVo selectPatrolSituationCount(PatrolActionQuery query);


    /**
     * 获取这个时间范围内的门店问题频次排行
     * @param bo            门店和区域
     * @param timeVo        时间条件
     * @return
     */
    List<ProblemRankVo> getProblemRank(StatisticsCountBo bo, StatisticsCountTimeVo timeVo);

    /**
     * 门店是否覆盖统计
     * @param query
     * @return
     */
    StoreCoverVo selectStoreIsCoveredCount(PatrolActionQuery query);
}
